package com.anrongtec.zcpt.openapi.util;

import android.content.Context;

import com.anrongtec.zcpt.base.DDApp;
import com.anrongtec.zcpt.interfaces.URLConstants;
import com.anrongtec.zcpt.interfaces.module.JsonDataRestult;
import com.anrongtec.zcpt.openapi.interfaces.ShuJuURL;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;

public class GsonUtil {
	private static Map<String, String> baseInfo;
	private static Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
	private static Context context;

	public static Gson getInstance() {
		return gson;
	}

	/**
	 * 用户登录
	 */
	public static String toLoginJson(String userName, String passwd, int loginType) {
		// baseInfo = DDApp.dApp.getBaseInfo();
		// baseInfo.put("busCode", "0000");
		// Map<String, Object> map = new HashMap<String, Object>();
		// // map.put("baseInfo", baseInfo);
		// map.put("userName", userName);
		// map.put("passwd", passwd);
		// map.put("loginType", loginType);
		// return gson.toJson(map);
		return "";
	}

	/**
	 * Object 转json
	 */
	public static Object fromJson(String json, Type type) {
		try {
			return gson.fromJson(json, type);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 初始化认证APP认证
	 * 
	 * @param pkg
	 * @param sha1
	 * @param ak
	 * @param imei
	 * @return
	 */
	public static String toAPPAuthJson(String pkg, String sha1, String ak, String deviceId, String imei) {
		Map<String, String> map = new HashMap<String, String>();
		map.put(ShuJuURL.Param.BUSCODE, ShuJuURL.ServerID.AUTH);
		map.put(ShuJuURL.Param.PKG, pkg);
		map.put(ShuJuURL.Param.SHA1CODE, sha1);
		map.put(ShuJuURL.Param.APPKEY, ak);
		map.put(ShuJuURL.Param.DEVICEID, deviceId);
		map.put(ShuJuURL.Param.IMEI, imei);
		return gson.toJson(map);
	}
	/**
	 * 获取AccessToken，绑定AccessToken和用户，设备，应用
	 * @param pkg
	 * @param sha1
	 * @param ak
	 * @param deviceId
	 * @param imei
	 * @param token
	 * @param idno
	 * @return
	 */
	public static String toRefeshAccessTokenJson(String pkg, String sha1, String ak, String deviceId, String imei,
			String token,String idno) {
		Map<String, String> map = new HashMap<String, String>();
		map.put(ShuJuURL.Param.BUSCODE, ShuJuURL.ServerID.REFRESHACCESSTOKEN);
		map.put(ShuJuURL.Param.PKG, pkg);
		map.put(ShuJuURL.Param.SHA1CODE, sha1);
		map.put(ShuJuURL.Param.APPKEY, ak);
		map.put(ShuJuURL.Param.DEVICEID, deviceId);
		map.put(ShuJuURL.Param.IMEI, imei);
		map.put(ShuJuURL.Param.TOKEN, token);
		map.put(ShuJuURL.Param.IDNO, idno);
		return gson.toJson(map);
	}

	/**
	 * 检验APP认证权限
	 * 
	 * @param pkg
	 * @param sha1
	 * @param ak
	 * @param imei
	 * @param token
	 * @return
	 */
	public static String tocheckAuthJson(String pkg, String sha1, String ak, String deviceId, String imei,
			String token) {
		Map<String, String> map = new HashMap<String, String>();
		map.put(ShuJuURL.Param.BUSCODE, ShuJuURL.ServerID.REFRESH);
		map.put(ShuJuURL.Param.PKG, pkg);
		map.put(ShuJuURL.Param.SHA1CODE, sha1);
		map.put(ShuJuURL.Param.APPKEY, ak);
		map.put(ShuJuURL.Param.DEVICEID, deviceId);
		map.put(ShuJuURL.Param.IMEI, imei);
		map.put(ShuJuURL.Param.TOKEN, token);
		return gson.toJson(map);
	}

	/**
	 * 获取用户信息
	 * 
	 * @param token
	 * @param idno
	 * @return
	 */
	public static String toGetStaffInfoJson(String accessToken, String deviceId, String imei) {
		Map<String, String> map = new HashMap<String, String>();
		map.put(ShuJuURL.Param.BUSCODE, ShuJuURL.ServerID.STAFFINFO);
		map.put(ShuJuURL.Param.DEVICEID, deviceId);
		map.put(ShuJuURL.Param.IMEI, imei);
		map.put(ShuJuURL.Param.ACCESSTOKEN, accessToken);
		return gson.toJson(map);
	}

	/**
	 * 登出权限
	 * 
	 * @param token
	 * @return
	 */
	public static String toAuthLogoutJson(String token, String deviceId, String imei) {
		Map<String, String> map = new HashMap<String, String>();
		map.put(ShuJuURL.Param.BUSCODE, ShuJuURL.ServerID.LOGOUT);
		map.put(ShuJuURL.Param.DEVICEID, deviceId);
		map.put(ShuJuURL.Param.IMEI, imei);
		map.put(ShuJuURL.Param.TOKEN, token);
		return gson.toJson(map);
	}

	/**
	 * 用户登出
	 */
	public static String toLogoutJson() {
		baseInfo = DDApp.dApp.getBaseInfo();
		baseInfo.put(URLConstants.BUSCODE, URLConstants.BusCode.LOGOUT);

		Map<String, Object> map = new HashMap<String, Object>();
		map.put("baseInfo", baseInfo);

		return gson.toJson(map);
	}

	/**
	 * 解析json为type格式
	 *
	 * @param json
	 * @param type
	 *            = new TypeToken<T>() {}.getType()
	 * @return
	 */
	public static <T> JsonDataRestult<T> decode(String json, Type type) {
		try {
			return gson.fromJson(json, type);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 解析json为type格式
	 *
	 *            = new TypeToken<T>() {}.getType()
	 * @return
	 */
	public static String objectToJson(Object t) {
		try {
			return gson.toJson(t);
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}
	}

}
